package com.jtny.nytb.config.dictionary.service;

import com.jtny.component.entity.PageData;
import com.jtny.component.exception.ServiceException;
import com.jtny.nytb.config.dictionary.dto.DictionaryDataDTO;
import com.jtny.nytb.config.dictionary.dto.DictionaryInfoDTO;
import com.jtny.nytb.config.dictionary.vo.*;

import java.util.List;

/**
 * 数据字典业务接口
 *
 * @author 智慧能源中心-lyq
 * @version 1.0
 * @package com.jtny.nytb.config.dictionary.biz
 * @fileName DictionaryBiz.java
 * @createTime 2023年09月01日 10:49
 * @Copyright© 2023 jtny
 * 江投能源技术研究院 版权所有
 */
public interface DictionaryBiz {

    /**
     * 新增数据字典操作
     *
     * @param dictionaryInfoFromVO 数据字典VO对象
     * @return 数据字典VO对象
     * @throws ServiceException 抛出异常
     */
    DictionaryVO saveDictionary(DictionaryInfoFromVO dictionaryInfoFromVO) throws ServiceException;

    /**
     * 保存批处理字典
     *
     * @param dictionaryInfoList 首先保存词典
     * @return {@link Boolean}
     * @throws ServiceException 服务异常
     */
    Boolean saveBatchDictionary(List<DictionaryInfoDTO> dictionaryInfoList) throws ServiceException;

    /**
     * 查询数据字典操作
     *
     * @param id 数据字典ID
     * @return 数据字典VO对象
     * @throws ServiceException 抛出异常
     */
    DictionaryMessageVO detailDictionary(Long id) throws ServiceException;

    /**
     * 更新数据字典操作
     *
     * @param dictionaryVO 数据字典VO对象
     * @throws ServiceException 抛出异常
     */
    void updateDictionary(DictionaryVO dictionaryVO) throws ServiceException;

    /**
     * 分页查询数据字典操作
     *
     * @param dictionaryPageQueryParamVO 查询条件VO参数对象
     * @return pageDate对象
     * @throws ServiceException 抛出异常
     */
    PageData<DictionaryVO> queryPage(DictionaryPageQueryParamVO dictionaryPageQueryParamVO) throws ServiceException;

    /**
     * 删除数据字典
     *
     * @param id 数据字典Id
     * @throws ServiceException 抛出异常
     */
    void deleteDictionary(Long id) throws ServiceException;

    /**
     * 禁用数据字典
     *
     * @param id 数据字典Id
     * @throws ServiceException 抛出异常
     */
    void disableDictionary(Long id) throws ServiceException;

    /**
     * 启用数据字典
     *
     * @param id 系统Id
     * @throws ServiceException 抛出异常
     */
    void enableDictionary(Long id) throws ServiceException;

    /**
     * 根据数据字典名称查询数据字典项信息
     *
     * @param name 数据字典名称
     * @return 数据字典项信息
     */
    List<DictionaryDataVO> queryDictionaryByName(String name) throws ServiceException;

    List<DictionaryDataVO> queryDictionaryByNameCode(String code);

    /**
     * 按名称存在字典
     *
     * @param nameList 名称列表
     * @return {@link List}<{@link String}>
     */
    List<String> existDictionaryByName(List<String> nameList);

    List<DictionaryDataDTO> listDictionaryByName(String name);

}
